home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / src890906.arc / FINGER.C < prev    next >
C/C++ Source or Header  |  1989-08-13  |  2KB  |  73 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "global.h"
  4. #include "mbuf.h"
  5. #include "socket.h"
  6. #include "session.h"
  7. #include "proc.h"
  8. #include "netuser.h"
  9.  
  10. int
  11. dofinger(argc,argv,p)
  12. int argc;
  13. char *argv[];
  14. void *p;
  15. {
  16.     struct sockaddr_in sock;
  17.     char *cp;
  18.     int s,i;
  19.     struct mbuf *bp;
  20.     struct session *sp;
  21.  
  22.     /* Allocate a session descriptor */
  23.     if((sp = newsession(argv[1],FINGER)) == NULLSESSION){
  24.         printf("Too many sessions\n");
  25.         freeargs(argc,argv);
  26.         return 1;
  27.     }
  28.     Current = sp;
  29.     Mode = CONV_MODE;
  30.     sp->cb.finger = Curproc;
  31.     sock.sin_family = AF_INET;
  32.     sock.sin_port = IPPORT_FINGER;
  33.     for(i=1;i<argc;i++){
  34.         cp = strchr(argv[i],'@');
  35.         if(cp == NULLCHAR){
  36.             printf("%s: local names not supported\n",argv[i]);
  37.             continue;
  38.         }
  39.         *cp++ = '\0';
  40.         printf("%s@%s -- ",argv[i],cp);
  41.         if((sock.sin_addr.s_addr = resolve(cp)) == 0){
  42.             printf("Host %s unknown\n",cp);
  43.             continue;
  44.         }
  45.         printf("trying %s",psocket((struct sockaddr *)&sock));
  46.         if((sp->s = s = socket(AF_INET,SOCK_STREAM,0)) == -1){
  47.             printf("Can't create socket\n");
  48.             break;
  49.         }
  50.         if(connect(s,(char *)&sock,sizeof(sock)) == -1){
  51.             cp = sockerr(s);
  52.             printf(" -- Connect failed: %s\n",cp != NULLCHAR ? cp : "");
  53.             close_s(s);
  54.             sp->s = -1;
  55.             continue;
  56.         }
  57.         printf("\n");
  58.         usprintf(s,"%s\r\n",argv[i]);
  59.         while(recv_mbuf(s,&bp,0,0,NULLCHAR,(int *)0) > 0){
  60.             /* Suspend output if we're not current */
  61.             while(Current != sp || Mode == CMD_MODE)
  62.                 pwait(sp);
  63.             write_p(stdout,bp);
  64.             free_p(bp);
  65.         }
  66.         close_s(s);
  67.         sp->s = -1;
  68.     }
  69.     freeargs(argc,argv);
  70.     freesession(sp);
  71.     return 0;
  72. }
  73.